<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8" />
  <title>Release Notes &raquo; Release 3.7.0 (Master) | Taskflow QuickStart</title>
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,400i,600,600i%7CSource+Code+Pro:400,400i,600" />
  <link rel="stylesheet" href="m-dark+documentation.compiled.css" />
  <link rel="icon" href="favicon.ico" type="image/vnd.microsoft.icon" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <meta name="theme-color" content="#22272e" />
</head>
<body>
<header><nav id="navigation">
  <div class="m-container">
    <div class="m-row">
      <span id="m-navbar-brand" class="m-col-t-8 m-col-m-none m-left-m">
        <a href="https://taskflow.github.io"><img src="taskflow_logo.png" alt="" />Taskflow</a> <span class="m-breadcrumb">|</span> <a href="index.html" class="m-thin">QuickStart</a>
      </span>
      <div class="m-col-t-4 m-hide-m m-text-right m-nopadr">
        <a href="#search" class="m-doc-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
          <path id="m-doc-search-icon-path" d="m6 0c-3.31 0-6 2.69-6 6 0 3.31 2.69 6 6 6 1.49 0 2.85-0.541 3.89-1.44-0.0164 0.338 0.147 0.759 0.5 1.15l3.22 3.79c0.552 0.614 1.45 0.665 2 0.115 0.55-0.55 0.499-1.45-0.115-2l-3.79-3.22c-0.392-0.353-0.812-0.515-1.15-0.5 0.895-1.05 1.44-2.41 1.44-3.89 0-3.31-2.69-6-6-6zm0 1.56a4.44 4.44 0 0 1 4.44 4.44 4.44 4.44 0 0 1-4.44 4.44 4.44 4.44 0 0 1-4.44-4.44 4.44 4.44 0 0 1 4.44-4.44z"/>
        </svg></a>
        <a id="m-navbar-show" href="#navigation" title="Show navigation"></a>
        <a id="m-navbar-hide" href="#" title="Hide navigation"></a>
      </div>
      <div id="m-navbar-collapse" class="m-col-t-12 m-show-m m-col-m-none m-right-m">
        <div class="m-row">
          <ol class="m-col-t-6 m-col-m-none">
            <li><a href="pages.html">Handbook</a></li>
            <li><a href="namespaces.html">Namespaces</a></li>
          </ol>
          <ol class="m-col-t-6 m-col-m-none" start="3">
            <li><a href="annotated.html">Classes</a></li>
            <li><a href="files.html">Files</a></li>
            <li class="m-show-m"><a href="#search" class="m-doc-search-icon" title="Search" onclick="return showSearch()"><svg style="height: 0.9rem;" viewBox="0 0 16 16">
              <use href="#m-doc-search-icon-path" />
            </svg></a></li>
          </ol>
        </div>
      </div>
    </div>
  </div>
</nav></header>
<main><article>
  <div class="m-container m-container-inflatable">
    <div class="m-row">
      <div class="m-col-l-10 m-push-l-1">
        <h1>
          <span class="m-breadcrumb"><a href="Releases.html">Release Notes</a> &raquo;</span>
          Release 3.7.0 (Master)
        </h1>
        <nav class="m-block m-default">
          <h3>Contents</h3>
          <ul>
            <li><a href="#release-3-7-0_download">Download</a></li>
            <li><a href="#release-3-7-0_system_requirements">System Requirements</a></li>
            <li><a href="#release-3-7-0_summary">Release Summary</a></li>
            <li>
              <a href="#release-3-7-0_new_features">New Features</a>
              <ul>
                <li><a href="#release-3-7-0_taskflow_core">Taskflow Core</a></li>
                <li><a href="#release-3-7-0_utilities">Utilities</a></li>
              </ul>
            </li>
            <li><a href="#release-3-7-0_bug_fixes">Bug Fixes</a></li>
            <li><a href="#release-3-7-0_breaking_changes">Breaking Changes</a></li>
            <li><a href="#release-3-7-0_documentation">Documentation</a></li>
            <li><a href="#release-3-7-0_miscellaneous_items">Miscellaneous Items</a></li>
          </ul>
        </nav>
<p>Taskflow 3.7.0 is the newest developing line to new features and improvements we continue to support. It is also where this documentation is generated. Many things are considered <em>experimental</em> and may change or break from time to time. While it may be difficult to be keep all things consistent when introducing new features, we continue to try our best to ensure backward compatibility.</p><section id="release-3-7-0_download"><h2><a href="#release-3-7-0_download">Download</a></h2><p>To download the newest version of Taskflow, please clone the master branch from <a href="https://github.com/taskflow/taskflow">Taskflow&#x27;s GitHub</a>.</p></section><section id="release-3-7-0_system_requirements"><h2><a href="#release-3-7-0_system_requirements">System Requirements</a></h2><p>To use Taskflow v3.7.0, you need a compiler that supports C++17:</p><ul><li>GNU C++ Compiler at least v8.4 with -std=c++17</li><li>Clang C++ Compiler at least v6.0 with -std=c++17</li><li>Microsoft Visual Studio at least v19.27 with /std:c++17</li><li>AppleClang Xcode Version at least v12.0 with -std=c++17</li><li>Nvidia CUDA Toolkit and Compiler (nvcc) at least v11.1 with -std=c++17</li><li>Intel C++ Compiler at least v19.0.1 with -std=c++17</li><li>Intel DPC++ Clang Compiler at least v13.0.0 with -std=c++17 and SYCL20</li></ul><p>Taskflow works on Linux, Windows, and Mac OS X.</p></section><section id="release-3-7-0_summary"><h2><a href="#release-3-7-0_summary">Release Summary</a></h2><p>This release introduces a new exception interface to help identify C++ errors in taskflow programs. Additionally, this release enhances the scheduling performance through integration of C++20 atomic-wait into scheduler, executor, and notifier.</p></section><section id="release-3-7-0_new_features"><h2><a href="#release-3-7-0_new_features">New Features</a></h2><section id="release-3-7-0_taskflow_core"><h3><a href="#release-3-7-0_taskflow_core">Taskflow Core</a></h3><ul><li>Improved scheduling performance of dependent asynchronous tasks</li><li>Improved scheduling performance of module task by removing busy looping</li><li>Improved <a href="classtf_1_1Executor.html#ab9aa252f70e9a40020a1e5a89d485b85" class="m-doc">tf::<wbr />Executor::<wbr />wait_for_all</a> using C++20 atomic wait</li><li>Improved tf::Notifier using C++20 atomic wait</li><li>Improved worker-thread ID mapping performance using C++20 atomic wait</li><li>Added <code>-Wshadow</code> to the compilation check</li><li>Added <a href="classtf_1_1AsyncTask.html#aefeefa30d7cafdfbb7dc8def542e8e51" class="m-doc">tf::<wbr />AsyncTask::<wbr />is_done</a> to query the completion status of an async task</li><li>Added <a href="classtf_1_1Taskflow.html#a354a7673fabeaf3be66928ad6b573900" class="m-doc">tf::<wbr />Taskflow::<wbr />remove_dependency</a> to remove dependencies from the graph</li><li>Added support for exception in <a href="classtf_1_1Taskflow.html" class="m-doc">tf::<wbr />Taskflow</a> and <a href="classtf_1_1Executor.html" class="m-doc">tf::<wbr />Executor</a></li></ul><pre class="m-code"><span class="n">tf</span><span class="o">::</span><span class="n">Executor</span><span class="w"> </span><span class="n">executor</span><span class="p">;</span><span class="w"></span>
<span class="n">tf</span><span class="o">::</span><span class="n">Taskflow</span><span class="w"> </span><span class="n">taskflow</span><span class="p">;</span><span class="w"></span>
<span class="n">taskflow</span><span class="p">.</span><span class="n">emplace</span><span class="p">([](){</span><span class="w"> </span><span class="k">throw</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="p">(</span><span class="s">&quot;exception&quot;</span><span class="p">);</span><span class="w"> </span><span class="p">});</span><span class="w"></span>
<span class="k">try</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">  </span><span class="n">executor</span><span class="p">.</span><span class="n">run</span><span class="p">(</span><span class="n">taskflow</span><span class="p">).</span><span class="n">get</span><span class="p">();</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
<span class="k">catch</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">runtime_error</span><span class="o">&amp;</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
<span class="w">  </span><span class="n">std</span><span class="o">::</span><span class="n">cerr</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="n">what</span><span class="p">()</span><span class="w"> </span><span class="o">&lt;&lt;</span><span class="w"> </span><span class="n">std</span><span class="o">::</span><span class="n">endl</span><span class="p">;</span><span class="w"></span>
<span class="p">}</span><span class="w"></span></pre><ul><li>Modified the CI to exclude exception test under sanitizers</li><li>Modified the <a href="classtf_1_1PartitionerBase.html" class="m-doc">tf::<wbr />PartitionerBase</a> to allow defining custom closure wrappers</li></ul><pre class="m-code"><span class="n">std</span><span class="o">::</span><span class="n">atomic</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"></span>
<span class="n">tf</span><span class="o">::</span><span class="n">Taskflow</span><span class="w"> </span><span class="n">taskflow</span><span class="p">;</span><span class="w"></span>
<span class="n">taskflow</span><span class="p">.</span><span class="n">for_each_index</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="mi">100</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"> </span>
<span class="w">  </span><span class="p">[](){</span><span class="w">                 </span>
<span class="w">    </span><span class="n">printf</span><span class="p">(</span><span class="s">&quot;%d</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">i</span><span class="p">);</span><span class="w"> </span>
<span class="w">  </span><span class="p">},</span><span class="w"></span>
<span class="w">  </span><span class="n">tf</span><span class="o">::</span><span class="n">StaticPartitioner</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="w"> </span><span class="p">[](</span><span class="k">auto</span><span class="o">&amp;&amp;</span><span class="w"> </span><span class="n">closure</span><span class="p">){</span><span class="w"></span>
<span class="w">    </span><span class="c1">// do something before invoking the partitioned task</span>
<span class="w">    </span><span class="c1">// ...</span>
<span class="w">    </span>
<span class="w">    </span><span class="c1">// invoke the partitioned task</span>
<span class="w">    </span><span class="n">closure</span><span class="p">();</span><span class="w"></span>

<span class="w">    </span><span class="c1">// do something else after invoking the partitioned task</span>
<span class="w">    </span><span class="c1">// ...</span>
<span class="w">  </span><span class="p">}</span><span class="w"></span>
<span class="p">);</span><span class="w"></span>
<span class="n">executor</span><span class="p">.</span><span class="n">run</span><span class="p">(</span><span class="n">taskflow</span><span class="p">).</span><span class="n">wait</span><span class="p">();</span><span class="w"></span></pre></section><section id="release-3-7-0_utilities"><h3><a href="#release-3-7-0_utilities">Utilities</a></h3></section></section><section id="release-3-7-0_bug_fixes"><h2><a href="#release-3-7-0_bug_fixes">Bug Fixes</a></h2><ul><li>Fixed compilation error of CUDA examples caused by not including <code><a href="for__each_8hpp.html" class="m-doc">for_<wbr />each.hpp</a></code></li><li>Fixed the runtime error of <a href="classtf_1_1FlowBuilder.html#a3b132bd902331a11b04b4ad66cf8bf77" class="m-doc">tf::<wbr />Taskflow::<wbr />for_each_index</a> when the range invalid</li></ul></section><section id="release-3-7-0_breaking_changes"><h2><a href="#release-3-7-0_breaking_changes">Breaking Changes</a></h2><ul><li>Renamed tf::Runtime::join to <a href="classtf_1_1Runtime.html#afcc18484a95fd2a834940d878eaf4dfc" class="m-doc">tf::<wbr />Runtime::<wbr />corun_all</a></li><li>Removed tf::WorkerInterface due to the support of exception</li></ul></section><section id="release-3-7-0_documentation"><h2><a href="#release-3-7-0_documentation">Documentation</a></h2><ul><li>Revised <a href="DependentAsyncTasking.html" class="m-doc">Asynchronous Tasking with Dependencies</a><ul><li>Added <a href="DependentAsyncTasking.html#QueryTheComppletionStatusOfDependentAsyncTasks" class="m-doc">Query the Completion Status of Dependent Async Tasks</a></li></ul></li><li>Revised <a href="ExceptionHandling.html" class="m-doc">Exception Handling</a></li><li>Revised <a href="ExecuteTaskflow.html" class="m-doc">Executor</a><ul><li>Removed the section of tf::WorkerInterface</li></ul></li><li>Revised <a href="PartitioningAlgorithm.html" class="m-doc">Partitioning Algorithm</a></li></ul></section><section id="release-3-7-0_miscellaneous_items"><h2><a href="#release-3-7-0_miscellaneous_items">Miscellaneous Items</a></h2><p>We have published Taskflow in the following venues:</p><ul><li>Cheng-Hsiang Chiu, Zhicheng Xiong, Zizheng Guo, Tsung-Wei Huang, and Yibo Lin, &quot;<a href="https://tsung-wei-huang.github.io/papers/hpcasia-24.pdf">An Efficient Task-parallel Pipeline Programming Framework</a>,&quot; <em>ACM International Conference on High-performance Computing in Asia-Pacific Region (HPC Asia)</em>, Nagoya, Japan, 2024</li><li>Cheng-Hsiang Chiu, Dian-Lun Lin, and Tsung-Wei Huang,, &quot;<a href="https://tsung-wei-huang.github.io/papers/iccad23-asynctask.pdf">Programming Dynamic Task Parallelism for Heterogeneous EDA Algorithms</a>,&quot; <em>IEEE/ACM International Conference on Computer-aided Design (ICCAD)</em>, San Francisco, CA, 2023</li></ul><p>Please do not hesitate to contact <a href="https://tsung-wei-huang.github.io/">Dr. Tsung-Wei Huang</a> if you intend to collaborate with us on using Taskflow in your scientific computing projects.</p></section>
      </div>
    </div>
  </div>
</article></main>
<div class="m-doc-search" id="search">
  <a href="#!" onclick="return hideSearch()"></a>
  <div class="m-container">
    <div class="m-row">
      <div class="m-col-m-8 m-push-m-2">
        <div class="m-doc-search-header m-text m-small">
          <div><span class="m-label m-default">Tab</span> / <span class="m-label m-default">T</span> to search, <span class="m-label m-default">Esc</span> to close</div>
          <div id="search-symbolcount">&hellip;</div>
        </div>
        <div class="m-doc-search-content">
          <form>
            <input type="search" name="q" id="search-input" placeholder="Loading &hellip;" disabled="disabled" autofocus="autofocus" autocomplete="off" spellcheck="false" />
          </form>
          <noscript class="m-text m-danger m-text-center">Unlike everything else in the docs, the search functionality <em>requires</em> JavaScript.</noscript>
          <div id="search-help" class="m-text m-dim m-text-center">
            <p class="m-noindent">Search for symbols, directories, files, pages or
            modules. You can omit any prefix from the symbol or file path; adding a
            <code>:</code> or <code>/</code> suffix lists all members of given symbol or
            directory.</p>
            <p class="m-noindent">Use <span class="m-label m-dim">&darr;</span>
            / <span class="m-label m-dim">&uarr;</span> to navigate through the list,
            <span class="m-label m-dim">Enter</span> to go.
            <span class="m-label m-dim">Tab</span> autocompletes common prefix, you can
            copy a link to the result using <span class="m-label m-dim">⌘</span>
            <span class="m-label m-dim">L</span> while <span class="m-label m-dim">⌘</span>
            <span class="m-label m-dim">M</span> produces a Markdown link.</p>
          </div>
          <div id="search-notfound" class="m-text m-warning m-text-center">Sorry, nothing was found.</div>
          <ul id="search-results"></ul>
        </div>
      </div>
    </div>
  </div>
</div>
<script src="search-v2.js"></script>
<script src="searchdata-v2.js" async="async"></script>
<footer><nav>
  <div class="m-container">
    <div class="m-row">
      <div class="m-col-l-10 m-push-l-1">
        <p>Taskflow handbook is part of the <a href="https://taskflow.github.io">Taskflow project</a>, copyright © <a href="https://tsung-wei-huang.github.io/">Dr. Tsung-Wei Huang</a>, 2018&ndash;2023.<br />Generated by <a href="https://doxygen.org/">Doxygen</a> 1.9.1 and <a href="https://mcss.mosra.cz/">m.css</a>.</p>
      </div>
    </div>
  </div>
</nav></footer>
</body>
</html>
